home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / amitcp / kern / kern_malloc.c < prev    next >
C/C++ Source or Header  |  1994-03-26  |  3KB  |  125 lines

  1. RCS_ID_C="$Id: kern_malloc.c,v 1.9 1994/03/26 09:36:29 too Exp $";
  2. /*
  3.  * Copyright (c) 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>
  4.  *                    Helsinki University of Technology, Finland.
  5.  *                    All rights reserved.
  6.  *
  7.  * HISTORY
  8.  * $Log: kern_malloc.c,v $
  9.  * Revision 1.9  1994/03/26  09:36:29  too
  10.  * Moved bsd_malloc(), bsd_free() inlines here as normal functions.
  11.  * Added bsd_realloc()
  12.  *
  13.  * Revision 1.8  1993/06/04  11:16:15  jraja
  14.  * Fixes for first public release.
  15.  *
  16.  * Revision 1.7  1993/05/17  01:07:47  ppessi
  17.  * Changed RCS version.
  18.  *
  19.  * Revision 1.6  1993/05/04  12:48:38  jraja
  20.  * Added tuning for SASC malloc.
  21.  *
  22.  * Revision 1.5  93/04/06  15:15:50  15:15:50  jraja (Jarno Tapio Rajahalme)
  23.  * Changed spl function return value storage to spl_t,
  24.  * changed bcopys and bzeros to aligned and/or const when possible,
  25.  * added inclusion of conf.h to every .c file.
  26.  * 
  27.  * Revision 1.4  93/03/11  19:41:03  19:41:03  jraja (Jarno Tapio Rajahalme)
  28.  * Changed mallocSemaphore to malloc_semaphore.
  29.  * 
  30.  * Revision 1.3  93/03/05  21:11:15  21:11:15  jraja (Jarno Tapio Rajahalme)
  31.  * Fixed includes (again).
  32.  * 
  33.  * Revision 1.2  93/02/24  12:54:36  12:54:36  jraja (Jarno Tapio Rajahalme)
  34.  * Changed init to remember if initialized.
  35.  * 
  36.  * Revision 1.1  93/02/04  18:29:36  18:29:36  jraja (Jarno Tapio Rajahalme)
  37.  * Initial revision
  38.  * 
  39.  */
  40.  
  41. #include <conf.h>
  42.  
  43. #include <sys/param.h>
  44. #include <sys/malloc.h>
  45.  
  46. #include <kern/amiga_includes.h>
  47.  
  48. #if __SASC
  49. /* 
  50.  * Change the minimum chuck size of the SASC memory allocator.
  51.  * The default value is 16.384 bytes (SASC6.2), but smaller value
  52.  * is more efficient, since it takes less time to search the free
  53.  * memory pool when it is smaller.
  54.  */
  55. long _MSTEP = 4096;
  56.  
  57. /*
  58.  * Set the memory type allocated by malloc() to public, since the memory
  59.  * is used by many tasks (including all library users)
  60.  */
  61. unsigned long _MemType = MEMF_PUBLIC;
  62.  
  63. #endif /* __SASC */
  64.  
  65. struct SignalSemaphore malloc_semaphore = { 0 };
  66. static BOOL initialized = FALSE;
  67.  
  68. BOOL
  69. malloc_init(void)
  70. {
  71.   if (!initialized) {
  72.     /*
  73.      * Initialize malloc_semaphore for use.
  74.      * Do not call bsd_malloc() or bsd_free() before this!
  75.      */
  76.     InitSemaphore(&malloc_semaphore);
  77.     initialized = TRUE;
  78.   }
  79.   return TRUE;
  80. }
  81.  
  82. void *
  83. bsd_malloc(unsigned long size, int type, int flags)
  84. {
  85.   register void *mem;
  86.  
  87.   extern void *malloc(size_t);
  88.   extern struct SignalSemaphore malloc_semaphore; 
  89.  
  90.   ObtainSemaphore(&malloc_semaphore);
  91.   mem = malloc((size_t)size);
  92.   ReleaseSemaphore(&malloc_semaphore);
  93.  
  94.   return mem;
  95. }
  96.  
  97. void
  98. bsd_free(void *addr, int type)
  99. {
  100.   extern void free(void *);
  101.   extern struct SignalSemaphore malloc_semaphore; 
  102.  
  103.   ObtainSemaphore(&malloc_semaphore);
  104.   free(addr);
  105.   ReleaseSemaphore(&malloc_semaphore);
  106. }
  107.  
  108. /*
  109.  * bsd_realloc() cannot be used for reallocating
  110.  * last freed block for obvious reasons
  111.  */
  112.  
  113. void *
  114. bsd_realloc(void * mem, unsigned long size, int type, int flags)
  115. {
  116.   extern void *realloc(void *, size_t);
  117.   extern struct SignalSemaphore malloc_semaphore; 
  118.  
  119.   ObtainSemaphore(&malloc_semaphore);
  120.   mem = realloc(mem, (size_t)size);
  121.   ReleaseSemaphore(&malloc_semaphore);
  122.  
  123.   return mem;
  124. }
  125.